package swu.myt;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpSession;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class UpLoadServlet extends HttpServlet{

	
	private static final long serialVersionUID = -3246200011998576489L;
	
	private static final int MEMORY_THRESHOLD   = 1024 * 1024 * 3;  // 3MB
	private static final int MAX_FILE_SIZE      = 1024 * 1024 * 40; // 40MB
	private static final int MAX_REQUEST_SIZE   = 1024 * 1024 * 50; // 50MB

	private static final String UPLOAD_DIRECTORY = "upload";
	
	public void init() {
		System.out.println("initialized!");
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
		this.doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
		System.out.println("uploadServlet Serving");
		request.setCharacterEncoding("utf-8");
		
		String saying = null;
		String saying1 = null;
		//new String(keyWord.getBytes("iso-8859-1"),"UTF-8");
		
		//String saying = request.getParameter("saying");这样传不行
		//System.out.println(saying);
		//String pic = request.getParameter("pic");
		HttpSession session=request.getSession();
		
		String username = (String)session.getAttribute("username");
		
		// 检测是否为多媒体上传
		if (!ServletFileUpload.isMultipartContent(request)) {
			// 如果不是则停止
			PrintWriter writer = response.getWriter();
			writer.println("Error: 表单必须包含 enctype=multipart/form-data");
			writer.flush();
			return;
		}
		
		// 配置上传参数
		DiskFileItemFactory factory = new DiskFileItemFactory();
		// 设置内存临界值 - 超过后将产生临时文件并存储于临时目录中
		factory.setSizeThreshold(MEMORY_THRESHOLD);
		// 设置临时存储目录
		factory.setRepository(new File(System.getProperty("java.io.tmpdir")));

		ServletFileUpload upload = new ServletFileUpload(factory);
		// 设置最大文件上传值
		upload.setFileSizeMax(MAX_FILE_SIZE);
		// 设置最大请求值 (包含文件和表单数据)
		upload.setSizeMax(MAX_REQUEST_SIZE);
		// 中文处理
		upload.setHeaderEncoding("UTF-8");
		// 构造临时路径来存储上传的文件
		// 这个路径相对当前应用的目录
		String uploadPath = request.getServletContext().getRealPath("./") + File.separator + UPLOAD_DIRECTORY;
		// 如果目录不存在则创建
		File uploadDir = new File(uploadPath);
		if (!uploadDir.exists()) {
			uploadDir.mkdir();
		}


		String pic = "";		
			
		// 解析请求的内容提取文件数据
		List<FileItem> formItems;
		try {
			formItems = upload.parseRequest(request);
			if (formItems != null && formItems.size() > 0) {
				// 迭代表单数据
				for (FileItem item : formItems) {
					// 处理不在表单中的字段
					if (!item.isFormField()) {
						String fileName = new File(item.getName()).getName();
						String filePath = uploadPath + File.separator + fileName;
						File storeFile = new File(filePath);
						// 在控制台输出文件的上传路径
						System.out.println(filePath);
						// 保存文件到硬盘
						try {
							item.write(storeFile);
						} catch (Exception e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						pic += fileName ;
						}
					else {
						if (item.getFieldName().equals("saying")) {
							
							
							saying1 = item.getString();	
						 
						    byte[] saying2 = saying1.getBytes("iso-8859-1");  //bArr[0]=fe,bArr[1]=ff;从bArr[2]开始为编码内容
						    saying = new String(saying2, "UTF-8"); 
							
							System.out.println(saying);
						}
						
					}
		
				}
			}
		} catch (FileUploadException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		
	          
	
		try {
			DBUtils.addsaying(username, saying, pic);
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//response.setContentType("text/html");//设置类型
		response.setCharacterEncoding("UTF-8");//设置字符集
		response.sendRedirect("./records.jsp");
		
		
	}
	public void destory() {
		System.out.println("Servlet Destoried.");
	}
}
